package com.example.demo.common;


import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.HashMap;

/**
 * 统一异常处理
 * 注意点一：注解 ControllerAdvice
 */
@ControllerAdvice // 这是针对所有 Controller 注解的异常通知
@ResponseBody  // 表示返回的不是静态页面，适用于现在前后端分离
public class MyExceptionAdvice {

    /**
     *  处理空指针异常
     *  注意点二： 注解 ExceptionHandler(NullPointerException.class)
     */
    @ExceptionHandler(NullPointerException.class)
    public HashMap<String,Object> doExceptionHandler(NullPointerException e) {
        HashMap<String,Object> hashMap = new HashMap<>();
        hashMap.put("code",-1);  // 状态码
        hashMap.put("message","空指针: " + e.getMessage());  // 报错信息
        hashMap.put("data",null);  // 数据，因为出错，所以没有返回数据
        return hashMap;  // 会把hashMap 最后转换为 application/json 字符串发给前端或者前端接口
    }

    /**
     * 针对所有的异常进行处理
     * 默认的异常处理（当具体的异常匹配不到时，会执行此方法）
     * @param e
     * @return
     */
    @ExceptionHandler(Exception.class)
    public HashMap<String,Object> doExceptionHandler(Exception e) {
        HashMap<String,Object> hashMap = new HashMap<>();
        hashMap.put("code",-1);  // 状态码
        hashMap.put("message","Exception: " + e.getMessage());  // 报错信息
        hashMap.put("data",null);  // 数据，因为出错，所以没有返回数据
        return hashMap;
    }
}
